home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 January - Disc 2 / Macworld (1999-01) (Disk 2).dmg / Serious Demos / Symbolic Composer 4.2 / Environment / Projects / Examples / Demos / Another Byte < prev    next >
Lisp/Scheme  |  1998-10-26  |  6KB  |  251 lines

  1. ; 2by3 trio for flute and 2 bass guitars: complete score
  2. ; commissioned by BBC Radio 3 for 'Another Byte'
  3. ; by Nigel Morgan
  4. ; to analyze the score double-click high-lighted keywords
  5.  
  6. (create-tonality full-dim 
  7.    '(c 4 d 4  d# 4 f 4 f# 4 g# 4 a 4 b 4 
  8. ;    a   b   c     d   e   f    g   h
  9.     c# 4 d# 4 e 4 f# 4 g 4 a 4 a# 4))  
  10. ;    i    j    k   l    m   n    o
  11.  
  12.  
  13. (setq m1 '(a a -b a) ; section 1
  14.       m2 '(= = = =)
  15.       m3 '(b a -b)
  16.       m4 '(b -d -c -b)
  17.       m5 '(-d d -c b -b)
  18.       m6 '(l k j i -c -b)
  19.       m7 '(= a c d)
  20.       m8 '(e f h)
  21.       m9 '(e f h o)
  22.       m10 '(e f h o l)
  23.       m11 '(e f o l h m)
  24.       codab1 '(= ap = =) ; coda
  25.       codab2 '(= a-p = =)
  26.       codaf '(= m = =)     
  27.       n1 '(a ae = ae) ; section 2
  28.       n2 '(= = hl =)
  29.       n3 '(= ae =)
  30.       n4 '(= hl =)
  31.       n5 '(= ae bf cg =)
  32.       n6 '(il = = = lp)
  33.       n7 '(b d f h o m k i)
  34. )
  35.  
  36. (setq set1a (append  m1 m2 m1 m3 ; 2/4 7/16
  37.                      m2 m1 m2 m4 ; 2/4 2/4
  38.                      m1 m3 m2 m5 ; 7/16 9/16
  39.                      m2 m4 m1 m6) ; 2/4 10/16
  40.  
  41. (setq set1b (append  m2 m1 m2 m3 
  42.                      m1 m2 m1 m4
  43.                      m2 m3 m1 m5
  44.                      m1 m4 m2 m6)
  45. )
  46.  
  47. (setq set1c (append  m2 m7 m2 m8
  48.                      m7 m2 m7 m9
  49.                      m2 m8 m7 m10
  50.                      m7 m9 m2 m11)
  51. )
  52.  
  53. (setq set2a (append n1 n1 m1 n1 ; 2/4 2/4 ;; bass
  54.                     n2 n2 n3 n5 ; 2/4 8/16
  55.                     m7 m9 n4 n6 ; 2/4 8/16
  56.                     n2 n2 m10 n7) ; 2/4 5/16 8/16
  57. )
  58.  
  59. (setq set2b (append n2 n2 m7 n2 ; bass
  60.                     n1 n1 n4 n6
  61.                     m2 m7 m8 m5
  62.                     n1 n1 (reverse n6) n7)
  63. )
  64.  
  65. ;; flute material
  66.  
  67. (setq set1a/b (append set1c 
  68.                (find-change 
  69.                 (gen-random 0.1 (length set1a) 
  70.                             '(a -b b c -c d -d e f g h))))
  71. )
  72.  
  73. (setq set2a/b (find-change 
  74.                 (gen-random 0.1 (* (length set2a) 2) 
  75.                             '(b d f h o m k i)))
  76. )
  77.  
  78. ;; dynamics : sections 1 & 2
  79.  
  80. (setq v1 '(96 72 100 64)
  81.       v2 '(0 0 0 0)
  82.       v3 '(96 64 72)
  83.       v3h '(0 110 0)  
  84.       v4 '(100 54 64 74)
  85.       v5 '(110 54 64 74 110)
  86.       v6 '(112 64 74 96 74 84)
  87.       v7 '(32 45 54 64 74 84 94 110) 
  88.       codav '(0 127 0 0)
  89. )
  90.  
  91. (setq vel1a (append v1 v2 v1 v3 
  92.                     v2 v1 v2 v4 
  93.                     v1 v3 v2 v5
  94.                     v2 v4 v1 v6)
  95. )
  96.  
  97. (setq vel1b (append v2 v1 v2 v3 
  98.                     v1 v2 v1 v4
  99.                     v2 v3 v1 v5
  100.                     v1 v4 v2 v6)
  101. )
  102.  
  103. (setq vel2a/b (append v1 v1 v2 v1
  104.                       v1 v1 v3h v5
  105.                       v2 v1 v3h v5
  106.                       v1 v1 v5 v7)
  107. )
  108.  
  109. (setq vel2ci (append v2 v2 v2 v1
  110.                      v2 v2 v3 v5
  111.                      v2 v2 v3 v5
  112.                      v2 v2 v5 v7)
  113. )
  114.  
  115. (setq vel2cii (append v2 v1 v1 v2
  116.                       v2 v1 v3 v5
  117.                       v2 v1 v3 v5
  118.                       v2 v1 v5 v7)
  119. )
  120.  
  121. ;; section 3 : with free solos
  122.  
  123. (setq o1 '(a -p -b ae = = = = = = = = = = = = = -o o -b) ; 5/4
  124.       o2 '(= -b-g = = = -d-h -d-h =) ; 2/4
  125.       o3 '(a -b -c c b a g f e) ; 9/16
  126.       o4 '(= = = = = il = = m l k j o m k j = = = =) ; 5/4
  127.       o5 '(= -b b d f = = -c) ; 2/4
  128.       o6 '(= = = = f d b -b -d) ; 9/16
  129.       o1r (build-list '= (length o1)) ; 5/4
  130.       o2r (build-list '= (length o2)) ; 2/4
  131.       o7  (symbol-transpose 3 '(= e = e = = =))
  132.       o7r (build-list '= (length o7)) ; 7/16
  133. )
  134.       
  135. (setq set3a (append o1 o1 o1 o1 ; 5/4 5/4 5/4 5/4
  136.                     o2 o2 o2 o3 ; 2/4 2/4 2/4 9/16
  137.                     o1r o1r o4 o4 ; 5/4 5/4 5/4 5/4
  138.                     o2r o2r o5 o6 o6 o7r) ; 2/4 2/4 2/4 9/16 9/16 7/16
  139.  
  140. (setq set3b (append o1r o1r o4 o4
  141.                     o2r o2r o5 o6
  142.                     o1 o1 o1 o1 
  143.                     o2 o2 o2 o3 (symbol-transpose 5 o3) o7r)
  144.  
  145. (setq set3c (append o1r o1r o4 o4 
  146.                     o5 (symbol-inversion 'a o5) o2r o3
  147.                     o1r o1r o4 o4
  148.                     o5 (symbol-inversion 'c o5) o2r o3
  149.                     (symbol-transpose 3 o3) o7)
  150. )
  151.  
  152. ;; dynamics: section 3
  153.  
  154. (setq v8 (gen-repeat 5 '(74 64 84 100))
  155.       v9 '(96 100 64 74 84 96 110 112)
  156.       v10 '(32 42 52 62 72 82 92 102 112)
  157.       v11 '(0 120 0 120 0 0 0)
  158. )
  159.  
  160. (setq vel3 (append (gen-repeat 2 
  161.                                (append v8 v8 v8 v8
  162.                                        v9 v9 v9 v10)) v10 v11)
  163. )
  164.  
  165. (def-tonality
  166.  flute (activate-tonality 
  167.         (full-dim e 6) (full-dim e 6) (full-dim e 6) 
  168.         (full-dim e& 6) (full-dim e 6))
  169.  default (activate-tonality 
  170.           (full-dim e 3) (full-dim d& 3) (full-dim e 3) 
  171.           (full-dim f 3) (full-dim e 3))
  172. )
  173.  
  174. (def-symbol
  175.  flute (append 
  176.         set1a/b set2a/b set1a/b  ; section 1 & 2 & 1
  177.         set3c ; section 3
  178.         set1a/b ; section1
  179.         codaf); coda
  180.  
  181.  bass1 (append 
  182.         set1a set1b set2a set2b set1a set1b ; section 1 & 2 & 1
  183.         set3a ; section 3
  184.         set1a set1b  ; section 1
  185.         codab1) ; coda
  186.  bass2 (append 
  187.         set1b set1a set2b set2a set1b set1a 
  188.         set3b  
  189.         set1b set1a
  190.         codab2)
  191. )             
  192.  
  193. (def-length
  194.   default '(1/16)
  195. )
  196.  
  197. (def-zone
  198.  default (list (* (length (append set1a set1b)) 120) ; section 1
  199.                  (* (length (append set2a set2b)) 120) ; section 2
  200.                  (* (length (append set1a set1b)) 120) ; section 1
  201.                  (* (length set3a) 120) ; section 3
  202.                  (* (length (append set1a set1b)) 120) ; section 1
  203.                  (* 4 120)) ; coda
  204. )
  205.  
  206. (def-velocity
  207.  flute  (append 
  208.          vel1b vel1a vel2ci vel2cii vel1b vel1a 
  209.          vel3
  210.          vel1b vel1a codav)
  211.  bass1  (append 
  212.          vel1a vel1b vel2a/b vel2a/b vel1a vel1b 
  213.          vel3
  214.          vel1a vel1b codav)
  215.  bass2  (append 
  216.          vel1b vel1a vel2a/b vel2a/b vel1b vel1a 
  217.          vel3
  218.          vel1b vel1a codav) 
  219. )
  220.  
  221. (def-channel
  222.    flute 3
  223.    bass1 1
  224.    bass2 2
  225. )
  226.  
  227. (def-program gm-sound-set
  228.    flute flute
  229.    bass1 slap-bass-2
  230.    bass2 slap-bass-2
  231. )
  232.  
  233. (def-controller gm-controllers
  234.   (flute panning '((64)))
  235.   (bass1 panning '((16)))
  236.   (bass2 panning '((110)))
  237. )
  238.  
  239. (def-tempo 80)
  240.  
  241. (midiport :printer)
  242.  
  243. (compile-instrument-p "ccl;output:" "Another byte midi"
  244.   flute
  245.   bass1
  246.   bass2
  247. )
  248.